class Solution {
public:
    int maxSumDivThree(vector<int>& nums) {
        int sum=accumulate(nums.begin(), nums.end(), 0);
        if(sum%3==0) return sum;

        vector<int> mod[3];
        for(int x:nums) mod[x%3].push_back(x);
        sort(mod[1].begin(), mod[1].end());
        sort(mod[2].begin(), mod[2].end());

        if(sum%3==2) swap(mod[1], mod[2]);
        int ans=mod[1].size()?sum-mod[1][0]:0;
        if(mod[2].size()>1) ans=max(ans, sum-mod[2][0]-mod[2][1]);
        return ans;
    }
};